Sensor networks have taken off, but they are still notoriously difficult to program. Our group has deployed sensor networks for volcano monitoring and rehabilitation medicine, and each time we find that tuning the network to achieve the right tradeoff in terms of data quality, battery lifetime, and bandwidth usage is quite painful. To make things worse, resource availability fluctuates over time, as does the load that the application places on those resources. The severely constrained and decentralized nature of sensor networks makes this problem fairly challenging.
In this talk, I will argue that the software for sensor networks should be designed around the fundamental abstraction of resource-aware programming. In this model, the application has direct visibility and control over resources as a first-class primitive. This requires the application code to take responsibility for its own resource management decisions, since it cannot expect a "bailout" from the OS. This approach enables much more effective adaptations to changing conditions, and supports a rich space of resource-management policies.
In this talk, I will present three related systems that leverage this approach: Pixie, a new sensor node operating system; Lance, a network-wide resource management plane; and Mercury, a platform for maximizing data quality in a wearable sensor network. I will present examples and evaluations based on our real-world deployments.